<?php
/**
* Controlador Cliente
*  @filesource
 * @author			Diogo Corazolla
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.controllers
 * @version			1.0
*/
class ClienteController extends Zend_Controller_Action
{
	
	private $intTamPag;
	
	/**
	 * Este metodo sera executado sempre que a classe for instanciada,
	 * depois do construtor.
	 * Faz o carregamento das classes que serao usadas pelo controlador.
	 * @return void
	 */
	public function init()
	{
		Zend_Loader::loadClass('Cliente');
		Zend_Loader::loadClass('Pessoa');
		Zend_Loader::loadClass('Fisica');
		Zend_Loader::loadClass('TipoContato');
		Zend_Loader::loadClass('Contato');
		Zend_Loader::loadClass('TipoEndereco');
		Zend_Loader::loadClass('Endereco');
		
		// inicializando variaveis com valor padrao
		$this->intTamPag = 10;
	}

	/**
	 * Metodo que mostra a pagina inicial
	 * @return void
	 */
	public function indexAction()
	{
		// exibe tela
		$this->montaTela("cliente/bodyindex.tpl", 
							array(), 
							false);
	}
	
	/**
	 * Metodo que mostra o grid
	 * @return void
	 */
	public function tabelaAction()
	{
		$pag = 1;
		$post = Zend_Registry::get('post');
		if (isset($post->pag)) $pag = $post->pag;
		if (isset($post->tamPag)) $this->intTamPag = $post->tamPag;
		$busca = $post->busca;
		
		$inicio = ($pag>1) ? ($pag-1)*$this->intTamPag : 0;
		$fim = $inicio + $this->intTamPag;
		
		$arrBusca = array();
		$arrBusca["p.bln_ativo="] = 1;
		if (!empty($busca)) $arrBusca["p.vhr_nome like "] = "%".$busca."%"; 
		
		$tblPessoa = new Pessoa();
		$total = $tblPessoa->pegaTotalClienteFisica($arrBusca);
		if ($fim>$total) $fim = $total;
		$totalPag = (int)(($total % $this->intTamPag == 0)?($total/$this->intTamPag):(($total/$this->intTamPag)+1));
		$rsClientes = $tblPessoa->buscaClienteFisica($arrBusca, 
											array("p.vhr_nome"), 
											$this->intTamPag, 
											$inicio);
											
		
		$contatos = array();
		$tblContato = new Contato();
		foreach ($rsClientes as $cliente)
		{
			$contatos[] = $tblContato->busca(array("c.pessoa_id="=>$cliente->pessoa_id));
		}
		
		$this->montaTela("cliente/bodytabela.tpl", 
							array("pag"=>$pag, 
									"total"=>$total, 
									"inicio"=>($inicio+1), 
									"fim"=>$fim,
									"busca"=>$busca,
									"totalPag"=>$totalPag,
									"clientes"=>$rsClientes,
									"contatos"=>$contatos,
									"urlEditar"=>"cliente/editar",
									"urlApagar"=>"cliente/apagar"), 
							false);
	}
	
	/**
	 * Metodo que mostra o formulario de novo
	 * @return void
	 */
	public function novoAction()
	{
		$get = Zend_Registry::get('get');
		$templateSecundario = $get->template_secundario;
		$escondeForm = $get->esconde_form;
		
		$this->montaTela("cliente/bodyform.tpl", 
							array(	"acao"=>"cliente/incluir",
									"templateSecundario"=>$templateSecundario,
									"escondeForm"=>$escondeForm,
									"totalContatos"=>"0",
									"totalEnderecos"=>"0"), 
							false);
	}
	
	
	/**
	 * monta form de edicao
	 * @param int $cod - codigo do objeto a ser editado
	 * @return void
	 */
	public function editarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;
		
		$tblCliente = new Cliente();
		$row = $tblCliente->find($cod)->current();
		$tblPessoa = new Pessoa();
		$rsPessoa = $tblPessoa->buscaClienteFisica(array("p.id="=>$row->pessoa_id))->current();
		
		$tblContato = new Contato();
		$rsContatos = $tblContato->busca(array("pessoa_id="=>$rsPessoa->pessoa_id));
		$totalContatos = count($rsContatos);
		
		$tblEndereco = new Endereco();
		$rsEnderecos = $tblEndereco->busca(array("pessoa_id="=>$rsPessoa->pessoa_id));
		$totalEnderecos = count($rsEnderecos);
		
		$this->montaTela("cliente/bodyform.tpl", 
							array("acao"=>"cliente/alterar",
									"cliente"=>$rsPessoa,
									"totalContatos"=>$totalContatos,
									"totalEnderecos"=>$totalEnderecos,
									"contatos"=>$rsContatos,
									"enderecos"=>$rsEnderecos), 
							false);
	}
	
	
	/**
	 * monta form de exclusao
	 * @param int $cod - codigo do objeto a ser apagado
	 * @return void
	 */
	public function apagarAction()
	{
		$post = Zend_Registry::get('post');
		$cod = $post->codigo;
		
		
		$tblPessoa = new Pessoa();
		$row = $tblPessoa->buscaClienteFisica(array("c.id="=>$cod))->current();
		$this->montaTela("cliente/bodyapagar.tpl", 
							array("acao"=>"cliente/excluir",
									"cliente"=>$row), 
							false);
	}
	
	/**
	 * Metodo que grava clientes no banco de dados
	 * @return void
	 */
	public function incluirAction()
	{
		// pegando dados POST salvos 
		$post = Zend_Registry::get('post');
		$cpf = $post->cpf;
		$cpf = str_replace(".", "", $cpf);
		$cpf = str_replace("-", "", $cpf);
		$nome = $post->nome;
		$nascimento = implode("-",array_reverse(explode("/",$post->nascimento)));
		$rg = $post->rg;
		$rgorgaouf = strtoupper($post->rgorgaouf);
		$numero_contatos = $post->num_contatos;
		$numero_enderecos = $post->num_enderecos;
		$template_secundario = $post->template_secundario;
		$esconde_form = $post->esconde_form;
		
		$contatos = array();
		for ($i=1; $i<=$numero_contatos; $i++)
		{
			$contatos[$i]["tipocontato_id"] = $post->__get("tipo_num_contatos".$i);
			$contatos[$i]["valor"] = $post->__get("valor_num_contatos".$i);
		}
		
		$enderecos = array();
		for ($i=1; $i<=$numero_enderecos; $i++)
		{
			$enderecos[$i]["tipoendereco_id"] = $post->__get("tipo_end_num_enderecos".$i);
			$enderecos[$i]["cidade_id"] = $post->__get("cidade_num_enderecos".$i);
			$enderecos[$i]["endereco"] = $post->__get("endereco_num_enderecos".$i);
			$enderecos[$i]["bairro"] = $post->__get("bairro_num_enderecos".$i);
			$enderecos[$i]["cep"] = str_replace("-", "", $post->__get("cep_num_enderecos".$i));
		}
		
		$tblPessoa = new Pessoa();
		$tblFisica = new Fisica();
		$tblCliente = new Cliente();
		$tblContato = new Contato();
		$tblEndereco = new Endereco();
		
		$rsPessoa = $tblPessoa->buscaClienteFisica(array("f.vhr_cpf="=>$cpf));

		$mensagem = "";
		$script = "";
		
		if (count($rsPessoa)>0) 
		{
			$mensagem = "Já existe um cliente com este CPF";			
		} 
		else 
		{
			$dados = array("vhr_nome"=>$nome, 
							"bln_ativo"=>1);
			$cod_pessoa = $tblPessoa->insert($dados);
			
			$dadosFisica = array("pessoa_id"=>$cod_pessoa, 
							"dte_nascimento"=>$nascimento,
							"vhr_cpf"=>$cpf,
							"vhr_rg"=>$rg,
							"vhr_rgorgaouf"=>$rgorgaouf);
			$codFisica = $tblFisica->insert($dadosFisica);
			
			$dadosCliente = array("pessoa_id"=>$cod_pessoa);
			$cod_cliente = $tblCliente->insert($dadosCliente);
			
			for ($i=1; $i<=$numero_contatos; $i++)
			{
				// inserindo registro na tabela associativa
				$dados = array("pessoa_id"=>$cod_pessoa, 
								"tipocontato_id"=>$contatos[$i]["tipocontato_id"], 
								"vhr_valor"=>$contatos[$i]["valor"]);
				if (!empty($dados["vhr_valor"]))
				{
					$tblContato->insert($dados);
				}
				
			}
			
			
			for ($i=1; $i<=$numero_enderecos; $i++)
			{
				// inserindo registro na tabela associativa
				$dados = array("pessoa_id"=>$cod_pessoa, 
								"tipoendereco_id"=>$enderecos[$i]["tipoendereco_id"],
								"cidade_id"=>$enderecos[$i]["cidade_id"],  
								"vhr_endereco"=>$enderecos[$i]["endereco"],
								"vhr_bairro"=>$enderecos[$i]["bairro"],
								"vhr_cep"=>$enderecos[$i]["cep"],
							);
				if (!empty($dados["vhr_endereco"]))
				{
					$tblEndereco->insert($dados);
				}
				
			}
			
			$mensagem = "Cliente cadastrado com sucesso";
			$_site = Zend_Registry::get("site");
			
			if(empty($template_secundario)&& empty($esconde_form)){
				$script = "\$('#div_form').html('');\n
				jqAjaxLink('".$_site["url"]."cliente/tabela', '', 'div_tabela');";
			}elseif(!empty($template_secundario)&& !empty($esconde_form)){
				if($template_secundario == "juridica/recupera-responsavel"){
					$script = "\$('#cpfresponsavel').val('".$post->cpf."');\n
					recuperaPessoaFisicaPeloCPF('resultadoResponsavel','".$post->cpf."','".$_site["url"]."');\n
					jqAjaxLink('".$_site["url"].$template_secundario."?cpf=$cpf', '', '".$esconde_form."');";
				}else{
					$script = "jqAjaxLink('".$_site["url"].$template_secundario."', '',  '".$esconde_form."');";
				}
			}elseif(!empty($esconde_form) && empty($template_secundario)){
				$script = "\$('#".$esconde_form."').html('');\n";
			}elseif(empty($esconde_form) && !empty($template_secundario)){
				$script = "jqAjaxLink('".$_site["url"].$template_secundario."', '', 'div_tabela');";
			}
		}
		
		
		$this->montaTela("cliente/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
		
	}
	
	/**
	 * grava alteracoes no banco
	 * @return void
	 */
	public function alterarAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;
		$cpf = $post->cpf;
		$cpf = str_replace(".", "", $cpf);
		$cpf = str_replace("-", "", $cpf);
		$nome = $post->nome;
		$nascimento = implode("-",array_reverse(explode("/",$post->nascimento)));
		$rg = $post->rg;
		$rgorgaouf = $post->rgorgaouf;
		$numero_contatos = $post->num_contatos;
		$numero_enderecos = $post->num_enderecos;
		
		$contatos = array();
		for ($i=1; $i<=$numero_contatos; $i++)
		{
			$contatos[$i]["tipocontato_id"] = $post->__get("tipo_num_contatos".$i);
			$contatos[$i]["valor"] = $post->__get("valor_num_contatos".$i);
		}
		
		$enderecos = array();
		for ($i=1; $i<=$numero_enderecos; $i++)
		{
			$enderecos[$i]["tipoendereco_id"] = $post->__get("tipo_end_num_enderecos".$i);
			$enderecos[$i]["uf_id"] = $post->__get("uf_num_enderecos".$i);
			$enderecos[$i]["endereco"] = $post->__get("endereco_num_enderecos".$i);
			$enderecos[$i]["bairro"] = $post->__get("bairro_num_enderecos".$i);
			$enderecos[$i]["cidade"] = $post->__get("cidade_num_enderecos".$i);
			$enderecos[$i]["cep"] = str_replace("-", "", $post->__get("cep_num_enderecos".$i));
		}
		
		$mensagem = "";
		$script = "";
		
		$tblCliente = new Cliente();
		$row = $tblCliente->find($codigo)->current();
		$cod_pessoa = $row->pessoa_id;
		
		$tblPessoa = new Pessoa();
		$row = $tblPessoa->find($cod_pessoa)->current();
		$row->vhr_nome = $nome;
		$row->save();
		
		$tblFisica = new Fisica();
		$row = $tblFisica->busca(array("pessoa_id="=>$cod_pessoa))->current();
		$row->dte_nascimento = $nascimento;
		$row->vhr_cpf = $cpf;
		$row->vhr_rg = $rg;
		$row->vhr_rgorgaouf = $rgorgaouf;
		$row->save();
		
		$tblContato = new Contato();
		$tblContato->apagaPessoa($cod_pessoa);
		
		for ($i=1; $i<=$numero_contatos; $i++)
		{
			// inserindo registro na tabela associativa
			$dados = array("pessoa_id"=>$cod_pessoa, 
							"tipocontato_id"=>$contatos[$i]["tipocontato_id"], 
							"vhr_valor"=>$contatos[$i]["valor"]);
			if (!empty($dados["vhr_valor"]))
			{
				$tblContato->insert($dados);
			}
		}
		
		$tblEndereco = new Endereco();
		$tblEndereco->apagaPessoa($cod_pessoa);
		
		for ($i=1; $i<=$numero_enderecos; $i++)
		{
			// inserindo registro na tabela associativa
			$dados = array("pessoa_id"=>$cod_pessoa, 
							"tipoendereco_id"=>$enderecos[$i]["tipoendereco_id"],
							"vhr_endereco"=>$enderecos[$i]["endereco"],
							"vhr_bairro"=>$enderecos[$i]["bairro"],
							"cidade_id"=>$enderecos[$i]["cidade"],
							"vhr_cep"=>$enderecos[$i]["cep"],
						);
			if (!empty($dados["vhr_endereco"]))
			{
				$tblEndereco->insert($dados);
			}
			
		}
		
		$mensagem = "Cliente alterado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."cliente/tabela', '', 'div_tabela');";	
		
		$this->montaTela("cliente/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
	}
	
	/**
	 * Metodo que apaga uma cliente do banco
	 * @return void
	 */
	public function excluirAction()
	{
		$post = Zend_Registry::get('post');
		$codigo = $post->cod;
		
		$mensagem = "";
		$script = "";
		
		$tblPessoa = new Pessoa();
		$tblPessoa->apagaCliente($codigo);
		
		$mensagem = "Cliente apagado com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n
		jqAjaxLink('".$_site["url"]."cliente/tabela', '', 'div_tabela');";	
		
		$this->montaTela("cliente/bodymensagem.tpl", 
							array("mensagem"=>$mensagem, 
									"script"=>$script), 
							false);
	}
	
	/**
	 * Monta a tela de retorno ao usuario
	 * @param string $corpo - arquivo tpl do corpo
	 * @param array $dados - array com os dados a serem inseridos na tela, no seguinte formato "nome"=>"valor"
	 * @param boolean $exibeHeader - true ou false para exibir header, menu e rodape 
	 * @return void
	 */
	private function montaTela($corpo, $dados=array(), $exibeHeader=true)
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout"];
		// se exibirHeader for verdadeiro
		if ($exibeHeader)
		{
			// adiciona cabecalho
			$view->assign('_cabecalho', $_site["header"]);
			// adiciona menu
			$view->assign('_menu', $_site["menu"]);
			// adiciona rodape
			$view->assign('_rodape', $_site["footer"]);
		}
		// se exibirHeader for falso
		else
		{
			// define template master sem cabecalho
			$tplLayout = $_site["layout_sem_header"];
		}
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);
	}
}
